package ar.edu.untref.robotica.control;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import ar.edu.untref.robotica.simulador.ParEscenarioRobot;
import ar.edu.untref.robotica.simulador.Simulador;

public class Teclado extends ModuloDeControl implements KeyListener, MouseWheelListener {

	public Teclado(Simulador simulador, ParEscenarioRobot parEscenarioRobot) {
		super(simulador, parEscenarioRobot);
		getSimulador().getGraficador().setFocusable(true);
		getSimulador().getGraficador().addKeyListener(this);
		getSimulador().getGraficador().addMouseWheelListener(this);
	}
	final private static long KEY_RELEASE_TIME_LOCK_IN_MS = 1000L;
	private static long lastKeyRelease_TimeMillis;
	@Override
	public void keyReleased (KeyEvent e) {
		final long currentTimeMillis = System.currentTimeMillis();
		 if( (currentTimeMillis - lastKeyRelease_TimeMillis) <= KEY_RELEASE_TIME_LOCK_IN_MS){
		        return;
		    }	
		switch (e.getKeyChar()) {
		case 'w':
			avanzar();
			break;
		case 'x':
			frenar();
			break;
		case 's':
			retroceder();
			break;
		case 'd':
			girarDerecha();
			break;
		case 'a':
			girarIzquierda();
			break;
		case 'g':
			acelerarRuedaIzquierda();
			break;
		case 'b':
			desacelerarRuedaIzquierda();
			break;
		case 'h':
			acelerarRuedaDerecha();
			break;
		case 'n':
			desacelerarRuedaDerecha();
			break;
		case '+':
			agrandarPantalla();
			break;
		case '-':
			achicarPantalla();
			break;
		case 'i':
			sensarAdelante();
			break;
		case 'k':
			sensarAtras();
			break;
		case 'j':
			sensarIzquierda();
			break;
		case 'l':
			sensarDerecha();
			break;
		}
		 lastKeyRelease_TimeMillis = System.currentTimeMillis();
	}

	@Override
	public void keyTyped(KeyEvent e) {
		/* nada que hacer aqu� */
	}

	@Override
	public void keyPressed(KeyEvent e) {
		/* nada que hacer aqu� */
	}

	@Override
	public void mouseWheelMoved(MouseWheelEvent e) {

		int notches = e.getWheelRotation();
		if (notches < 0) {
			getSimulador().getGraficador().aumentarZoom();
		} else {
			getSimulador().getGraficador().disminuirZoom();
		}
	}

}
